package lp2.projeto.gerenciador;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import lp2.projeto.anotacao.Anotacao;
import lp2.projeto.horario.*;
/**
 * Classe responsavel por armazena informacoes sobre um contato.
 */
public class Evento implements Serializable, Comparable<Evento> {
	private static final long serialVersionUID = 6831800491684505457L;
	private String nome;
	private Horario horario;
	private Intervalo intervalo;
	private String descricao;
	private String tipo;
	private int duracao;
	private List<Anotacao> anotacoes;
	
	
	/**
	 * Construtor da classe Evento.
	 * @param nome Nome do evento
	 * @param horario Horario do evento
	 * @param descricao Descricao do evento
	 * @param duracao Duracao do evento
	 * @param tipo Tipo do evento
	 */
	public Evento(String nome,Horario horario, String descricao, int duracao, String tipo){
		this.nome = nome;
		this.horario = horario;
		this.descricao = descricao;
		this.duracao = duracao;
		this.tipo = tipo;
		this.intervalo = new Intervalo(horario,duracao);
		this.anotacoes = new ArrayList<Anotacao>();
	}
	/**
	 * Get do horario do evento.
	 * @return Horario do evento
	 */
	public Horario getHorario() {
		return horario;
	}
	
	public String getData() {
		return horario.getDia() + "/" + horario.getMes().getNumero() + "/" + horario.getAno();
	}
	
	/**
	 * Set do horario do evento.
	 * @param Novo horario do evento
	 */
	public void setHorario(Horario horario) {
		this.horario = horario;
	}
	/**
	 * Get do tipo do evento.
	 * @return Tipo do evento
	 */
	public String getTipo() {
		return tipo;
	}
	/**
	 * Set do tipo do evento.
	 * @param tipo Novo tipo do evento
	 */
	public void setTipo(String tipo) {
		this.tipo = tipo;
	}
	/**
	 * Get do nome do evento.
	 * @return Nome do evento
	 */
	public String getNome() {
		return nome;
	}
	/**
	 * Set do nome do evento.
	 * @param nome Novo nome do evento
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}
	/**
	 * Get da descricao do evento.
	 * @return Descricao do evento
	 */
	public String getDescricao() {
		return descricao;
	}
	/**
	 * Get do intervalo do evento.
	 * @return Intervalo do evento
	 */
	public Intervalo getIntervalo() {
		return intervalo;
	}
	/**
	 * Set do intervalo do evento.
	 * @param intervalo Novo intervalo do evento
	 */
	public void setIntervalo(Intervalo intervalo) {
		this.intervalo = intervalo;
	}
	/**
	 * Set da descricao do evento.
	 * @param descricao Nova descricao do evento
	 */
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	/**
	 * Get da duracao do evento.
	 * @return Duracao do evento
	 */
	public int getDuracao() {
		return duracao;
	}
	/**
	 * Set da duracao do evento.
	 * @param duracao Nova duracao do evento
	 */
	public void setDuracao(int duracao) {
		this.duracao = duracao;
	}
	/**
	 * Retorna se o evento inicia em um determinado dia
	 * @param dia Dia
	 * @param mes Mes
	 * @param ano Ano
	 * @return true, se inicia neste dia
	 */
	public boolean iniciaNoDia(int dia, Mes mes, int ano) {
		Horario inicio = intervalo.getInicio();
		return inicio.getDia() == dia && inicio.getMes() == mes && inicio.getAno() == ano;
	}
	/**
	 * toString da classe Evento
	 * @return String contendo os dados do evento
	 */
	@Override
	public String toString() {
		return  getNome() + " || " + horario + " || " + anotacoes.size() + " anotacao(oes)";
		
	}
	
	/**
	 * @return uma representacao em String detalhada do Evento
	 */
	public String toStringDetalhado() {
		return "Nome: " + nome +
			", Horario: " + horario +
			", Duracao: " + duracao +
			", Tipo: " + tipo;
	}
	
	/**
	 * Get da hora do evento.
	 * @return Hora do evento.
	 */
	public String getHora(){
		return "" + horario.getHora() + ":" + horario.getMinuto();
	}
	
	/**
	 * Compara dois eventos, pela data de inicio
	 * @param outro Outro evento
	 * @return <0 Se este evento inicia antes, >0 se depois, =0 se igual
	 */
	@Override
	public int compareTo(Evento outro) {
		return horario.compareTo(outro.getHorario());
	}
	
	/**
	 * @return as anotacoes
	 */
	public List<Anotacao> getAnotacoes() {
		return anotacoes;
	}
	
	/**
	 * Seta as anotacoes
	 * @param anotacoes as anotacoes
	 */
	public void setAnotacoes(List<Anotacao> anotacoes) {
		this.anotacoes = anotacoes;
	}
}
